import User from '../models/User.js'

// 获取所有用户
export const getAllUsers = async (req, res) => {
    try {
        const users = await User.find().sort({ createdAt: -1 })
        res.json({
            success: true,
            data: users,
            count: users.length
        })
    } catch (error) {
        console.error('获取用户列表失败:', error)
        res.status(500).json({
            success: false,
            message: '获取用户列表失败',
            error: error.message
        })
    }
}

// 根据ID获取单个用户
export const getUserById = async (req, res) => {
    try {
        const { id } = req.params
        const user = await User.findById(id)

        if (!user) {
            return res.status(404).json({
                success: false,
                message: '用户不存在'
            })
        }

        res.json({
            success: true,
            data: user
        })
    } catch (error) {
        console.error('获取用户失败:', error)
        res.status(500).json({
            success: false,
            message: '获取用户失败',
            error: error.message
        })
    }
}

// 创建新用户
export const createUser = async (req, res) => {
    try {
        const { name, email, age } = req.body

        // 检查邮箱是否已存在
        const existingUser = await User.findByEmail(email)
        if (existingUser) {
            return res.status(400).json({
                success: false,
                message: '邮箱已被使用'
            })
        }

        const user = new User({
            name,
            email,
            age
        })

        const savedUser = await user.save()

        res.status(201).json({
            success: true,
            data: savedUser,
            message: '用户创建成功'
        })
    } catch (error) {
        console.error('创建用户失败:', error)

        // 处理验证错误
        if (error.name === 'ValidationError') {
            const errors = Object.values(error.errors).map(err => err.message)
            return res.status(400).json({
                success: false,
                message: '数据验证失败',
                errors
            })
        }

        res.status(500).json({
            success: false,
            message: '创建用户失败',
            error: error.message
        })
    }
}

// 更新用户
export const updateUser = async (req, res) => {
    try {
        const { id } = req.params
        const { name, email, age } = req.body

        // 检查用户是否存在
        const user = await User.findById(id)
        if (!user) {
            return res.status(404).json({
                success: false,
                message: '用户不存在'
            })
        }

        // 如果邮箱发生变化，检查新邮箱是否已被其他用户使用
        if (email && email !== user.email) {
            const existingUser = await User.findByEmail(email)
            if (existingUser && existingUser._id.toString() !== id) {
                return res.status(400).json({
                    success: false,
                    message: '邮箱已被其他用户使用'
                })
            }
        }

        const updatedUser = await User.findByIdAndUpdate(
            id,
            { name, email, age },
            {
                new: true, // 返回更新后的文档
                runValidators: true // 运行验证器
            }
        )

        res.json({
            success: true,
            data: updatedUser,
            message: '用户更新成功'
        })
    } catch (error) {
        console.error('更新用户失败:', error)

        // 处理验证错误
        if (error.name === 'ValidationError') {
            const errors = Object.values(error.errors).map(err => err.message)
            return res.status(400).json({
                success: false,
                message: '数据验证失败',
                errors
            })
        }

        res.status(500).json({
            success: false,
            message: '更新用户失败',
            error: error.message
        })
    }
}

// 删除用户
export const deleteUser = async (req, res) => {
    try {
        const { id } = req.params

        const deletedUser = await User.findByIdAndDelete(id)

        if (!deletedUser) {
            return res.status(404).json({
                success: false,
                message: '用户不存在'
            })
        }

        res.json({
            success: true,
            data: deletedUser,
            message: '用户删除成功'
        })
    } catch (error) {
        console.error('删除用户失败:', error)
        res.status(500).json({
            success: false,
            message: '删除用户失败',
            error: error.message
        })
    }
}

// 批量删除用户
export const deleteMultipleUsers = async (req, res) => {
    try {
        const { ids } = req.body

        if (!ids || !Array.isArray(ids) || ids.length === 0) {
            return res.status(400).json({
                success: false,
                message: '请提供有效的用户ID列表'
            })
        }

        const result = await User.deleteMany({ _id: { $in: ids } })

        res.json({
            success: true,
            data: {
                deletedCount: result.deletedCount
            },
            message: `成功删除 ${result.deletedCount} 个用户`
        })
    } catch (error) {
        console.error('批量删除用户失败:', error)
        res.status(500).json({
            success: false,
            message: '批量删除用户失败',
            error: error.message
        })
    }
}
